package com.cloud.school.bus.teacherhelper;

import java.io.File;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;

import com.android.support.jhf.debug.DebugLog;
import com.android.support.jhf.debug.WriteLogCat;
import com.android.support.jhf.handlerui.HandlerPostUI;
import com.android.support.jhf.handlerui.HandlerToastUI;
import com.android.support.jhf.network.NetworkClient;
import com.android.support.jhf.network.loopj.android.http.ResponseHandlerInterface;
import com.android.support.jhf.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.android.support.jhf.universalimageloader.core.DefaultConfigurationFactory;
import com.android.support.jhf.universalimageloader.core.DisplayImageOptions;
import com.android.support.jhf.universalimageloader.core.ImageLoader;
import com.android.support.jhf.universalimageloader.core.ImageLoaderConfiguration;
import com.android.support.jhf.universalimageloader.core.assist.ImageScaleType;
import com.android.support.jhf.universalimageloader.core.assist.QueueProcessingType;
import com.android.support.jhf.universalimageloader.utils.StorageUtils;
import com.android.support.jhf.utils.AndroidUniqueSerialNumber;
import com.android.support.jhf.utils.DateUtils;
import com.baidu.frontia.FrontiaApplication;
import com.cloud.school.bus.teacherhelper.base.utils.AppUserId;
import com.cloud.school.bus.teacherhelper.entitys.ClassInfo;
import com.cloud.school.bus.teacherhelper.entitys.LoginSetting;
import com.cloud.school.bus.teacherhelper.entitys.Student;
import com.cloud.school.bus.teacherhelper.entitys.Teacher;
import com.cloud.school.bus.teacherhelper.include.Version;
import com.cloud.school.bus.teacherhelper.modules.SlidingActivity;
import com.cloud.school.bus.teacherhelper.protocol.classstudent.GetClassinfoRequest;
import com.cloud.school.bus.teacherhelper.protocol.classstudent.GetClassinfoResponse;

import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.app.Application;
import android.content.Context;
import android.os.Build;
import android.os.Environment;
import android.os.StrictMode;
import android.provider.Settings.Secure;
import android.telephony.TelephonyManager;
import android.util.Log;

public class TeacherHelperApplication extends FrontiaApplication {

	private static String TAG = "TeacherHelperApplication";
	
	/** 教师信息 */
	public Teacher mTeacher;
	/** 教师账号中的学生列表 */
	public List<Student> mStudentList = new ArrayList<Student>();
	/** 班级信息 */
	public ClassInfo mClassInfo;
	/**登陆设置*/
	public LoginSetting mLoginSetting;

	/** 带缓存的，内存缓存和磁盘缓存，设置再调用displayImage()有效,使用loadImage()无效 */
	public DisplayImageOptions mCacheDisplayImageOptions;
	/** 不带缓存，不带内存和磁盘缓存 */
	public DisplayImageOptions mNoCacheDisplayImageOptions;
	/** 带缓存的，默认图片是头像，用户学生头像显示 */
	public DisplayImageOptions mStudentCacheDisplayImageOptions;
	/** 判断应用主界面是否运行,false没有运行，true运行 */
	public boolean mFlagHome = false;

	@Override
	public void onCreate() {
		super.onCreate();
		Log.i(TAG, "onCreate");

		// ClientSession.sHeaderUserAgent = Version.minProductName + "_"
		// + Version.versionDesc + "_" + Version.platform + "_"
		// + Build.VERSION.RELEASE + "_" + Version.market + "_"
		// + ClientSession.getInstance().IMEI;
		// NetworkClient.getNetworkClient().setDefaultUserAgent("");

		initImageLoader();

//		setRequestId();

		DebugLog.setDebug(Version.DEBUG);

	}
	
//	/**
//	 * 设置请求id
//	 */
//	private void setRequestId() {
//
//		String androidUniqueSerialNumber = AndroidUniqueSerialNumber
//				.getInstance(this).getAndroidUniqueSerialNumber();
//		AppUserId.setUUId(this, androidUniqueSerialNumber);
//		AppUserId.setDeviceId(this, androidUniqueSerialNumber);
//	}

	public void imageLoaderInit(int imageWidth, int imageHeight) {
		File individualCacheDir = StorageUtils
				.getIndividualCacheDirectory(this);
		String cacheDir = individualCacheDir.getAbsolutePath() + "/"
				+ imageWidth;
		File cacheFile = new File(cacheDir);
		if(!cacheFile.exists()){
			cacheFile.mkdirs();
		}
		// 1.完成ImageLoaderConfiguration的配置
		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
				this)
				.discCache(
						DefaultConfigurationFactory
								.createReserveDiscCache(cacheFile))
				// .denyCacheImageMultipleSizesInMemory()
				.memoryCacheExtraOptions(imageWidth, imageHeight)
				// default = device screen dimensions
				// .discCacheExtraOptions(imageWidth, imageHeight,
				// CompressFormat.JPEG, 100, null)
				// default = device screen dimensions
				.threadPoolSize(30)
				// default
				.threadPriority(Thread.NORM_PRIORITY - 1)
				// default
				.tasksProcessingOrder(QueueProcessingType.FIFO)
				// default
				.denyCacheImageMultipleSizesInMemory()
				.memoryCache(new LruMemoryCache(15 * 1024 * 1024))
				.memoryCacheSize(15 * 1024 * 1024)
//				.memoryCacheSizePercentage(13) // default
				// .discCache(new UnlimitedDiscCache(cacheDir))// default
				.discCacheSize(50 * 1024 * 1024) // 缓冲大小
				.discCacheFileCount(100) // 缓冲文件数目
				// .discCacheFileNameGenerator(new HashCodeFileNameGenerator())
				// // default
				// .imageDownloader(new BaseImageDownloader(this)) // default
				// .imageDecoder(new BaseImageDecoder()) // default
				// .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
				// // default
				.writeDebugLogs().build();

		if (ImageLoader.getInstance().isInited()) {
			ImageLoader.getInstance().destroy();
		}
		// 2.单例ImageLoader类的初始化
		ImageLoader imageLoader = ImageLoader.getInstance();
		imageLoader.init(config);

	}

	private void initImageLoader() {
		// 3.DisplayImageOptions实例对象的配置
		// 以下的设置再调用displayImage()有效，使用loadImage()无效
		mCacheDisplayImageOptions = new DisplayImageOptions.Builder()
				.showImageOnLoading(R.drawable.ic_default)
				.showImageForEmptyUri(R.drawable.ic_default) // empty
																	// URI时显示的图片
				.showImageOnFail(R.drawable.imageerror) // 不是图片文件 显示图片
				.resetViewBeforeLoading(true) // default
				.delayBeforeLoading(1000).cacheInMemory(true) // 缓存至内存
				.cacheOnDisc(true) // 缓存至手机SDCard
				.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)// default
				.bitmapConfig(Bitmap.Config.RGB_565) // default
				// .displayer(new SimpleBitmapDisplayer()) // default
				// 可以设置动画，比如圆角或者渐变
				// .handler(new Handler()) // default
				.build();

		mStudentCacheDisplayImageOptions = new DisplayImageOptions.Builder()
				.showImageOnLoading(R.drawable.student_default)
				.showImageForEmptyUri(R.drawable.student_default) // empty
																	// URI时显示的图片
				.showImageOnFail(R.drawable.student_default) // 不是图片文件 显示图片
				.resetViewBeforeLoading(true) // default
				.delayBeforeLoading(1000).cacheInMemory(true) // 缓存至内存
				.cacheOnDisc(true) // 缓存至手机SDCard
				.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)// default
				.bitmapConfig(Bitmap.Config.RGB_565) // default
				// .displayer(new SimpleBitmapDisplayer()) // default
				// 可以设置动画，比如圆角或者渐变
				// .handler(new Handler()) // default
				.build();

		mNoCacheDisplayImageOptions = new DisplayImageOptions.Builder()
				.showImageOnLoading(R.drawable.ic_default)
				.showImageForEmptyUri(R.drawable.ic_default) // empty
																	// URI时显示的图片
				.showImageOnFail(R.drawable.imageerror) // 不是图片文件 显示图片
				.resetViewBeforeLoading(true) // default
				.delayBeforeLoading(1000).cacheInMemory(true) // 缓存至内存
				.cacheOnDisc(false) // 缓存至手机SDCard
				.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)// default
				.bitmapConfig(Bitmap.Config.RGB_565) // default
				// .displayer(new SimpleBitmapDisplayer()) // default
				// 可以设置动画，比如圆角或者渐变
				// .handler(new Handler()) // default
				.build();

		imageLoaderInit(80, 80);

	}

}
